package com.hippo.core.service;


import com.alibaba.fastjson.JSONObject;
import com.hippo.core.dao.PageModuleDao;
import com.hippo.core.entity.PageModule;
import com.hippo.core.util.CommonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author: hippo
 */
@Service
public class PageModuleService {

    @Autowired
    private PageModuleDao pageModuleDao;

    private final static String ROOT = "0";

    public static List<PageModule> findRoots(List<PageModule> allNodes) {
        // 根节点
        List<PageModule> root = new ArrayList<>();
        allNodes.forEach(node -> {
            if (Objects.equals(node.getParentId(), ROOT)) {
                root.add(node);
            }
        });
        root.forEach(node -> {
            findChildren(node, allNodes);
        });
        return root;
    }

    private static PageModule findChildren(PageModule treeNode, List<PageModule> treeNodes) {
        for (PageModule it : treeNodes) {
            if (treeNode.getChildren() == null) {
                treeNode.setChildren(new ArrayList<>());
            }
            if (treeNode.getId().equals(it.getParentId())) {
                treeNode.getChildren().add(findChildren(it, treeNodes));
            }
        }
        return treeNode;
    }

    public JSONObject getPageModuleTree(String projectId) {
        return CommonUtil.successPage(findRoots(pageModuleDao.getPageModuleList(projectId)));
    }

    public JSONObject updatePageModule(JSONObject obj) {
        return CommonUtil.response(pageModuleDao.updatePageModule(obj));
    }

    public JSONObject addPageModule(JSONObject obj) {
        return CommonUtil.response(pageModuleDao.addPageModule(obj));
    }

    public JSONObject deletePageModule(JSONObject obj) {
        return CommonUtil.response(pageModuleDao.deletePageModule(obj));
    }


}
